package com.l2qq.common.handler;

import com.l2qq.common.kit.JsoupXssUtil;
import org.apache.commons.text.StringEscapeUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Arrays;

public class XssRequestWrapper extends HttpServletRequestWrapper {
    public XssRequestWrapper(HttpServletRequest request) {
        super(request);
    }
    @Override
    public String getContentType() {
        String contentType = super.getContentType();
        // 跳过文件上传请求
        if (contentType != null && contentType.startsWith("multipart/")) {
            return contentType;
        }
        // 其他请求正常过滤
        return super.getContentType();
    }

    // 过滤单个参数
    @Override
    public String getParameter(String name) {
        String value = super.getParameter(name);
        if ("content".equals(name) || name.endsWith("Html")) {
            // 富文本使用 Jsoup 清理（保留标签）
            return JsoupXssUtil.clean(value);
        } else {
            // 普通文本转义所有 HTML（破坏标签）
            return StringEscapeUtils.escapeHtml4(value);
        }
    }

    // 过滤数组参数
    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if (values == null) return null;
        return Arrays.stream(values)
                     .map(JsoupXssUtil::clean)
                     .toArray(String[]::new);
    }

    // 过滤 Header（可选）
    @Override
    public String getHeader(String name) {
        return JsoupXssUtil.clean(super.getHeader(name));
    }
}